/**
 * https://leetcode.cn/problems/trapping-rain-water/solutions/692342/jie-yu-shui-by-leetcode-solution-tuvc/?envType=study-plan-v2&envId=top-100-liked
 * 输入：height = [0,1,0,2,1,0,1,3,2,1,2,1]
输出：6
 * @param {number[]} height
 * @return {number}
 */
/**
 * 计算直方图能捕获的雨水量
 * @param {number[]} height - 直方图的高度数组
 * @return {number} - 捕获的雨水总量
 */
var trap = function (height) {
  // 特殊情况处理：如果数组为空或只有一个元素，则无法捕获雨水
  if (height.length <= 1) return 0;

  let totalWater = 0; // 存储总的水量
  let leftIndex = 0; // 左边索引
  let rightIndex = height.length - 1; // 右边索引
  let maxLeft = 0; // 当前左边的最大高度
  let maxRight = 0; // 当前右边的最大高度

  while (leftIndex < rightIndex) {
    maxLeft = Math.max(maxLeft, height[leftIndex]); // 更新左边最大高度
    maxRight = Math.max(maxRight, height[rightIndex]); // 更新右边最大高度

    // 如果左边的高度小于右边的高度，则左边可以捕获雨水
    if (height[leftIndex] < height[rightIndex]) {
      totalWater += maxLeft - height[leftIndex]; // 累加捕获的水量
      leftIndex++; // 移动左边索引
    } else {
      totalWater += maxRight - height[rightIndex]; // 累加捕获的水量
      rightIndex--; // 移动右边索引
    }
  }

  return totalWater;
};


const height = [0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1];
console.log(trap(height));
